#include <stdio.h>  
#include <gsl/gsl_fit.h>  

/*#pragma comment(lib, "libgsl_d.lib")  
#pragma comment(lib, "libgslcblas_d.lib") */ 

#pragma comment(lib, "libgsl.a")  
#pragma comment(lib, "libgslcblas.a")  


int
main(void)
{
	int i, n = 4;
	double x[4] = { 1970, 1980, 1990, 2000 };
	double y[4] = { 12, 11, 14, 13 };
	double w[4] = { 0.1, 0.2, 0.3, 0.4 };

	double c0, c1, cov00, cov01, cov11, chisq;

	gsl_fit_wlinear(x, 1, w, 1, y, 1, n,
		&c0, &c1, &cov00, &cov01, &cov11,
		&chisq);

	printf("# best fit: Y = %g + %g X\n", c0, c1);
	printf("# covariance matrix:\n");
	printf("# [ %g, %g\n#   %g, %g]\n",
		cov00, cov01, cov01, cov11);
	printf("# chisq = %g\n", chisq);

	for (i = 0; i < n; i++)
		printf("data: %g %g %g\n",
		x[i], y[i], 1 / sqrt(w[i]));

	printf("\n");

	for (i = -30; i < 130; i++)
	{
		double xf = x[0] + (i / 100.0) * (x[n - 1] - x[0]);
		double yf, yf_err;

		gsl_fit_linear_est(xf,
			c0, c1,
			cov00, cov01, cov11,
			&yf, &yf_err);

		printf("fit: %g %g\n", xf, yf);
		printf("hi : %g %g\n", xf, yf + yf_err);
		printf("lo : %g %g\n", xf, yf - yf_err);
	}
	return 0;
}